package org.example.blogcommon.base.config;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class SwaggerConfiguration {
    /**
     * 配置全局 API 信息
     */
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                // 文档基本信息
                .info(new Info()
                        .title("博客项目接口文档") // 标题
                        .description("此文档详细说明了博客项目后台所有接口的使用规范，包括请求参数、响应数据等") // 描述
                        .version("v1.0.0") // 版本
                        // 联系人信息
                        .contact(new Contact()
                                .name("坐忘道") // 联系人姓名
                                .url("https://坐忘道.com") // 联系人网址
                                .email("xxx@163.com")) // 联系人邮箱
                        // 许可证信息（可选）
                        .license(new License()
                                .name("Apache 2.0")
                                .url("https://www.apache.org/licenses/LICENSE-2.0.html")))
                // 全局请求参数（如令牌）
                .components(new Components()
                        .addSecuritySchemes("bearerAuth",
                                new SecurityScheme()
                                        .type(SecurityScheme.Type.HTTP)
                                        .scheme("bearer")
                                        .bearerFormat("JWT")
                                        .description("登录令牌（格式：Bearer token）")))
                // 全局应用安全方案
                .addSecurityItem(new SecurityRequirement().addList("bearerAuth"));
    }

    /**
     * 配置 API 扫描规则（可选）
     * 如需自定义扫描路径、过滤规则，可添加此配置
     */
    /*@Bean
    public GroupedOpenApi userApi() {
        return GroupedOpenApi.builder()
                .group("用户模块") // 分组名称
                .pathsToMatch("/api/user/**") // 扫描的路径规则
                .build();
    }*/
}